关于C语言"++"或"--"问题,求救...

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:37:49
#include<stdio.h>
void main()
{
int i=2, s;
s=(i++)+(++i)+(++i);
printf("%d %d",s,i);
}

/*
A、s=(2++)+3+4;
s=3+3+4;
s=10; //?
i==4; //?

B、s=(2++)+3+4;
s=3+3+4;
s=10; //?
i==5; //?

C、s=(2++)+3+4;
s=5+3+4;
s=12; //?
i==5; //?

D、s=(2++)+3+4;
s=5+3+4;
s=12; //?
i==4; //?

以上A、B、C、D,哪个结果对?为什么?
*/

B啊

从左到右计算

(i++)这步之后,表达式(i++)的值是3,但是i要增加1,i=3
接下来是(++i),执行后表达(++i)的值是3,i=4

再有一个(++i)=4,i =5;

所以有

s=3+3+4;
s=10;
i==5;

而不是其他答案

B
++和--是右结合运算符

++i和i++的不同是,++i是先使i的值加1再参加运算,i++是先运算再自加
比如j=i++
假如i的初值为3,则执行后j的值等于3,然后i的值自加为4
但是j=++i的结果就是i和j都为4了

但是,这个题在不同的编译器下结果也不同,部分编译器认为三个括号里面的i值是相同的,而经过++的运算结果也是相同的,故这题的解也可以是9。
这样就造成了歧义性,所以大多数程序员都习惯性的避免这个问题的发生

同意2楼的说法,这个提最关键的是不同编译器有不同的答案。问题是你用的那个编译器

楼主可以用下面的程序检验:

#include<stdio.h>
void main()
{
int i=2, s;
int a,b,c;
s=(a=i++)+(b=++i)+(c=++i);
printf("%d %d\n",s,i);
printf("a=%d,b=%d,c=%d\n",a,b,c);
getch();
}
---------------------------------
我用winxp,TC
上面的程序输出:
12 5
a=4,b=4,c=4